`use strict`

let fs = require('fs');
let path = require('path');
let router = require('koa-router')();

//搜索过滤所有的路由文件
function searchFile(dir) {
    //需要过滤的控制器文件，是js文件，并且不是index.js
    let files = fs.readdirSync(dir);

    let contrullerFiles = files.filter((name) => {
        return name.endsWith('.js') && name !== 'index.js';
    });
    return contrullerFiles;
};


//遍历每一个路由文件，注册每一个定义的路由
function registerRoutes(files) {
    files.forEach(item => {
        let tmpFile = path.join(__dirname, item);
        let tmpRoutes = require(tmpFile);
        for (var x in tmpRoutes) {
            // 获得键值对中的值，里面的请求类型
            let type = tmpRoutes[x][0];
            // 获取键值中的值（是一个数组），里面的处理函数
            let fn = tmpRoutes[x][1];
            if (type === 'get') {
                router.get(x, fn);
            }
            else if (type === 'post') {
                router.post(x, fn);
            }
            else if (type === 'put') {
                router.put(x, fn);
            }
            else if (type === 'delete') {
                router.delete(x, fn);
            }
        }
    })
};

//将本文件实现为一个中间件，可以在main.js中注册使用

module.exports = function () {
    let defaultControlleDir = __dirname;

    let controllerFiles=searchFile(defaultControlleDir);

    registerRoutes(controllerFiles);   


    return router.routes();
}